home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 4 / FM Towns Free Software Collection 4 - Disc 1.iso / t_os / mricon / source / main.asm < prev    next >
Encoding:
Assembly Source File  |  1991-10-19  |  13.3 KB  |  811 lines

  1.         .286
  2. _TEXT        SEGMENT  WORD PUBLIC 'CODE'
  3. _TEXT        ENDS
  4. _DATA        SEGMENT  WORD PUBLIC 'DATA'
  5. _DATA        ENDS
  6. CONST        SEGMENT  WORD PUBLIC 'CONST'
  7. CONST        ENDS
  8. _BSS        SEGMENT  WORD PUBLIC 'BSS'
  9. _BSS        ENDS
  10. _INST        SEGMENT  WORD PUBLIC 'INST'
  11. _INST        ENDS
  12.  
  13. DGROUP        GROUP    _TEXT, CONST, _BSS, _DATA, _INST
  14.  
  15. extrn        _setbios:near
  16. extrn        _resetbios:near
  17. extrn        His_init:near
  18. extrn        His_end:near
  19. extrn        _VDB_init:near
  20. extrn        _Dummy_init:near
  21. extrn        _cflush:near
  22.  
  23. regs_set    struc
  24. regs_es        dw    ?
  25. regs_ds        dw    ?
  26. regs_di        dw    ?
  27. regs_si        dw    ?
  28. regs_bp        dw    ?
  29. regs_sp        dw    ?
  30. regs_bx        dw    ?
  31. regs_dx        dw    ?
  32. regs_cx        dw    ?
  33. regs_ax        dw    ?
  34. regs_ip        dw    ?
  35. regs_cs        dw    ?
  36. regs_cf        dw    ?
  37. regs_set    ends
  38.  
  39. _DATA        segment
  40.  
  41. Exe_Param    dw    ?            ; Envp Seg    +0
  42.         dw    ?            ; para offset    +2
  43.         dw    ?            ;      seg    +4
  44.         dw    offset DGROUP:Exe_fcb1    ; FCB1 offset    +6
  45.         dw    ?            ;      seg    +8
  46.         dw    offset DGROUP:Exe_fcb2    ; FCB2 offset    +10
  47.         dw    ?            ;      seg    +12
  48.  
  49. Exe_fcb1    db    16 dup (0)
  50. Exe_fcb2    db    16 dup (0)
  51.  
  52. Command        db    'C:\COMMAND.COM'
  53.         db    128 dup (0)
  54. Def_Param    db    0,0Dh
  55.  
  56.         public    term_flg
  57.         public    vdb_act_flg
  58.         public    kyb_act_flg
  59.         public    trap_flg
  60.  
  61. term_flg    db    0
  62. vdb_act_flg    db    0
  63. kyb_act_flg    db    0
  64. trap_flg    db    0
  65. rsget_flg    db    0
  66.  
  67. term_port    db    0
  68. rts_flg        db    0
  69.  
  70. key_shift    db    ?
  71. key_code    dw    0FFFFh
  72. key_addr    dw    0
  73. key_vect    dd    far
  74.  
  75. RS_status    dw    ?
  76. RS_old_param    db    18 dup (?)
  77.  
  78. RS_param    db    ?,?
  79. RS_buf_off    dw    ?
  80. RS_buf_seg    dw    ?
  81.         dw    ?,?
  82. RS_irq_off    dw    ?
  83. RS_irq_seg    dw    ?
  84.         db    ?,?,?
  85.  
  86. RS_buffer    dw    1024+4+10 dup (?)
  87.  
  88. ;            +0    +1    +2    +3    +4    +5    +6    +7
  89. ;            +8    +9    +a    +b    +c    +d    +e    +f
  90. enc_key_tbl    dw    1B10h,1E10h,2E10h,2C10h,2010h,1310h,2110h,2210h    ;+00 ^@
  91.         dw    0F00h,1000h,2410h,4E00h,2610h,1D00h,2F10h,1910h ;+08 ^H
  92.         dw    1A10h,1110h,1410h,1F10h,1510h,1710h,2D10h,1210h    ;+10 ^P
  93.         dw    2B10h,1610h,2A10h,0100h,5100h,4F00h,4D00h,5000h ;+18 ^X
  94.         dw    3500h,0204h,0304h,0404h,0504h,0604h,0704h,0804h    ;+20 
  95.         dw    0904h,0A04h,2804h,2704h,3100h,0C00h,3200h,3300h ;+28 (
  96.         dw    0B00h,0200h,0300h,0400h,0500h,0600h,0700h,0800h    ;+3x 0
  97.         dw    0900h,0A00h,2800h,2700h,3104h,0C04h,3204h,3304h ;+38 8
  98.         dw    1B00h,1E04h,2E04h,2C04h,2004h,1304h,2104h,2204h    ;+40 @
  99.         dw    2304h,1804h,2404h,2504h,2604h,3004h,2F04h,1904h ;+48 H
  100.         dw    1A04h,1104h,1404h,1F04h,1504h,1704h,2D04h,1204h    ;+50 P
  101.         dw    2B04h,1604h,2A04h,1C00h,0E00h,2900h,0D00h,3400h ;+58 X
  102.         dw    1B04h,1E00h,2E00h,2C00h,2000h,1300h,2100h,2200h    ;+60 `
  103.         dw    2300h,1800h,2400h,2500h,2600h,3000h,2F00h,1900h ;+68 h
  104.         dw    1A00h,1100h,1400h,1F00h,1500h,1700h,2D00h,1200h    ;+70 p
  105.         dw    2B00h,1600h,2A00h,1C04h,0E04h,2904h,0D04h,4B00h ;+78 x
  106.  
  107. _DATA        ends
  108.  
  109. _TEXT        segment
  110.         ASSUME CS: DGROUP, DS: DGROUP, ES: DGROUP
  111.  
  112.         org    02ch
  113. EnvSeg        label    word
  114.  
  115.         org    080h
  116. CmdsLine    label    word
  117.  
  118.         org    100h
  119. entry:        jmp    main
  120.  
  121. _TEXT        ends
  122.  
  123. _INST        segment
  124.         ASSUME CS: DGROUP, DS: DGROUP, ES: DGROUP
  125.  
  126. main        proc    near
  127.         mov    ax,cs
  128.         mov    ds,ax
  129.         mov    es,ax
  130.         cld
  131.  
  132.         call    Screen_init
  133.         call    _setbios
  134.         call    His_init
  135.         call    Path_init
  136.         call    PF_key_init
  137.         call    RS_init
  138.  
  139.         mov    sp,offset DGROUP:Local_Stack
  140.  
  141.         mov    ax,offset DGROUP:End_of_Prog
  142.         add    ax,15
  143.         shr    ax,4
  144.         push    cs
  145.         push    ax
  146.         call    _Dummy_init    ; short Dummy_init(short seg,short cs)
  147.         add    sp,4
  148.         mov    bx,ax
  149.         mov    ax,cs
  150.         mov    es,ax
  151.         mov    ah,4Ah
  152.         int    21h
  153.  
  154.         mov    di,offset DGROUP:Exe_Param
  155.         mov    ax,EnvSeg
  156.         mov    [di+0],ax
  157.  
  158.         mov    ax,ds
  159.         mov    [di+4],ax
  160.         mov    [di+8],ax
  161.         mov    [di+12],ax
  162.  
  163.         mov    si,offset DGROUP:CmdsLine
  164.         lodsb
  165.         cmp    al,0
  166.         je    Def_Fork
  167.         mov    ah,al
  168.  
  169. main_1:        cmp    ah,0
  170.         je    Def_Fork
  171.         dec    ah
  172.         lodsb
  173.         cmp    al,0Dh
  174.         je    Def_Fork
  175.         cmp    al,' '
  176.         je    main_1
  177.         cmp    al,09h
  178.         je    main_1
  179.  
  180.         mov    bx,offset DGROUP:Command
  181.         jmp    main_5
  182.  
  183. main_2:        cmp    ah,0
  184.         je    main_4
  185.         dec    ah
  186.         lodsb
  187.         cmp    al,0Dh
  188.         je    main_4
  189.         cmp    al,' '
  190.         je    main_3
  191.         cmp    al,09h
  192.         je    main_3
  193. main_5:        mov    [bx],al
  194.         inc    bx
  195.         jmp    short main_2
  196.  
  197. main_3:        dec    si
  198.         mov    [si],ah
  199.         mov    [di+2],si
  200.         mov    byte ptr [bx],0
  201.         jmp    short Com_Fork
  202.  
  203. main_4:        mov    byte ptr [bx],0
  204. Def_Fork:    mov    word ptr [di+2],offset DGROUP:Def_Param
  205.  
  206. Com_Fork:    push    ds
  207.         pop    es
  208.         mov    si,[di+2]
  209.         mov    di,offset DGROUP:Exe_fcb1
  210.         mov    ax,2901h
  211.         int    21h
  212.         mov    di,offset DGROUP:Exe_fcb2
  213.         mov    ax,2901h
  214.         int    21h
  215.  
  216.         mov    dx,offset DGROUP:Command
  217.         mov    bx,offset DGROUP:Exe_Param
  218.         mov    ax,4B00h
  219.         int    21h
  220.  
  221.         call    RS_end
  222.         call    His_end
  223.         call    _resetbios
  224.  
  225.         mov    ax,4C00h        ; End of Oricon
  226.         int    21h
  227.  
  228. main        endp
  229.  
  230. rs_getc        proc    near
  231.  
  232.         mov    ah,05h
  233.         mov    al,[term_port]
  234.         int    9Bh
  235.         cmp    ah,0
  236.         jne    rs_getc_no
  237.         mov    cx,dx
  238.  
  239.         cmp    [rts_flg],0
  240.         je    rs_getc_1
  241.         cmp    cx,256
  242.         jnb    rs_getc_1
  243.  
  244.         mov    byte ptr [rts_flg],0
  245.         mov    ah,08h
  246.         mov    al,[term_port]
  247.         mov    dl,22h
  248.         int    9Bh
  249.  
  250. rs_getc_1:    cmp    cx,0
  251.         je    rs_getc_no
  252.  
  253.         mov    ah,06h
  254.         mov    al,[term_port]
  255.         push    cx
  256.         int    9Bh
  257.         pop    cx
  258.         cmp    ah,0
  259.         jne    rs_getc_no
  260.  
  261.         clc
  262.         ret
  263.  
  264. rs_getc_no:    mov    byte ptr [rsget_flg],0
  265.         stc
  266.         ret
  267.  
  268. rs_getc        endp
  269.  
  270. key_strip    proc    near
  271.         push    bx
  272.         push    cx
  273.         push    dx
  274.  
  275.         mov    ch,bh
  276. key_strip_1:    mov    ah,07h
  277.         pushf
  278.         call    cs:[key_vect]
  279.         cmp    bh,ch
  280.         jne    key_strip_2
  281.         mov    ax,0900h
  282.         pushf
  283.         call    cs:[key_vect]
  284.         jmp    key_strip_1
  285.  
  286. key_strip_2:    pop    dx
  287.         pop    cx
  288.         pop    bx
  289.         ret
  290. key_strip    endp
  291.  
  292. Cheng_Screen    proc    near
  293.         mov    ah,21h
  294.         int    91h            ; Ext VDB Command
  295.         ret
  296. Cheng_Screen    endp
  297.  
  298.         public    Term_in_out
  299. Term_in_out    proc    near
  300.  
  301.         cmp    byte ptr [rsget_flg],0
  302.         je    Term_end
  303.  
  304.         cmp    byte ptr [trap_flg],0
  305.         jne    Term_end
  306.  
  307.         cmp    byte ptr [kyb_act_flg],0
  308.         jne    Term_in
  309.  
  310.         mov    ax,0901h
  311.         int    90h
  312.  
  313. Term_in:    call    rs_getc
  314.         jc    Term_end
  315.  
  316.         mov    ah,1Dh+40h
  317.         mov    al,dl
  318.         int    91h
  319.  
  320.         jmp    Term_in
  321.  
  322. Term_end:    ret
  323.  
  324. Term_in_out    endp
  325.  
  326. Key_Trap    proc    near
  327.  
  328.         mov    byte ptr [kyb_act_flg],1
  329.         cmp    word ptr [key_code],0FFFFh
  330.         jne    key_bak_get
  331.  
  332. key_in_loop:    mov    ax,0901h
  333.         pushf
  334.         call    cs:[key_vect]
  335.         mov    [key_shift],bl
  336.  
  337.         cmp    bh,69h
  338.         je    key_cnt_chk
  339.         cmp    bh,5Bh
  340.         je    key_cnt_chk
  341.  
  342.         cmp    byte ptr [term_flg],0
  343.         jne    trap_term
  344.         cmp    byte ptr [trap_flg],0
  345.         jne    trap_term
  346.  
  347.         cmp    dh,0FFh
  348.         jne    key_out_ret
  349.  
  350. end_of_chk:    cmp    byte ptr [bp+regs_ax],0
  351.         je    key_in_loop
  352.  
  353.         mov    ah,0
  354.         mov    bh,0FFh
  355.         mov    bl,[key_shift]
  356.         mov    dx,0FFFFh
  357.  
  358. key_out_ret:    mov    byte ptr [bp+regs_ax+1],ah
  359.         mov    [bp+regs_bx],bx
  360.         mov    [bp+regs_dx],dx
  361.         mov    byte ptr [kyb_act_flg],0
  362.         ret                    ; Ret Trap
  363.  
  364. key_bak_get:    mov    ah,0
  365.         mov    dx,[key_code]
  366.         mov    bx,[key_addr]
  367.         mov    word ptr [key_code],0FFFFh
  368.         jmp    key_out_ret
  369.  
  370. key_cnt_chk:    call    key_strip
  371.         cmp    bh,69h
  372.         je    trep_on_off
  373.  
  374.         mov    al,[term_flg]
  375.         xor    al,1
  376.         mov    [term_flg],al
  377.         call    Cheng_Screen
  378.         jmp    key_in_loop
  379.  
  380. trep_on_off:    mov    al,[trap_flg]
  381.         xor    al,1
  382.         mov    [trap_flg],al
  383.         jmp    key_in_loop
  384.  
  385. trap_term:    cmp    dh,0FFh
  386.         je    term_chk
  387.  
  388.         mov    ah,07h
  389.         mov    al,[term_port]
  390.         int    9Bh
  391.         jmp    key_in_loop
  392.  
  393. term_chk:    call    rs_getc
  394.         jc    end_of_chk
  395.  
  396.         mov    ah,1Dh+40h
  397.         mov    al,dl
  398.         int    91h
  399.  
  400.         cmp    byte ptr [trap_flg],0
  401.         je    term_chk
  402.  
  403.         cmp    dl,0Ah            ; Not Ret 0Ah Key Code
  404.         je    term_chk
  405.  
  406.         sub    bh,bh
  407.         mov    bl,[key_shift]
  408.  
  409.         sub    dh,dh
  410.         cmp    dl,80h
  411.         jnb    not_enc_key
  412.  
  413.         mov    bx,dx
  414.         add    bx,dx
  415.         add    bx,offset DGROUP:enc_key_tbl
  416.         mov    bx,[bx]
  417.  
  418. not_enc_key:    mov    ah,0
  419.         jmp    key_out_ret
  420.  
  421. Key_Trap    endp
  422.  
  423. Key_Bios    proc    near
  424.         cmp    ah,09h
  425.         je    trep_key
  426.         cmp    ah,07h
  427.         je    trep_key
  428.         jmp    cs:[key_vect]
  429.  
  430. trep_key:    pusha
  431.         push    ds
  432.         push    es
  433.         mov    bp,sp
  434.  
  435.         sti
  436.         push    cs
  437.         pop    ds
  438.  
  439.         cmp    ah,09
  440.         je    trep_key_1
  441.  
  442.         mov    byte ptr [bp+regs_ax],1
  443.         call    Key_Trap
  444.         mov    [key_code],dx
  445.         mov    [key_addr],bx
  446.         cmp    dh,0FFh
  447.         jne    trep_key_2
  448.         mov    byte ptr [bp+regs_ax],0
  449.         jmp    trep_key_2
  450.  
  451. trep_key_1:    call    Key_Trap
  452.  
  453. trep_key_2:    pop    es
  454.         pop    ds
  455.         popa
  456.         iret
  457.  
  458. Key_Bios    endp
  459.  
  460. RS_irq_ent    proc    far
  461.         mov    byte ptr cs:[rsget_flg],1
  462.         cmp    ah,10h
  463.         jne    RS_irq_1
  464.         mov    ah,08h
  465.         mov    al,cs:[term_port]
  466.         mov    dl,02h
  467.         int    9Bh
  468.         mov    byte ptr cs:[rts_flg],1
  469. RS_irq_1:    ret
  470. RS_irq_ent    endp
  471.  
  472. RS_end        proc    near
  473.         mov    ah,02h
  474.         mov    al,[term_port]
  475.         int    9Bh
  476.  
  477.         mov    ah,03h
  478.         mov    al,[term_port]
  479.         mov    di,offset DGROUP:RS_old_param
  480.         int    9Bh
  481.  
  482.         mov    dx,[RS_status]
  483.         cmp    dh,0
  484.         jne    RS_end_1
  485.  
  486.         mov    ah,01h
  487.         mov    al,[term_port]
  488.         int    9Bh
  489.  
  490.         mov    ah,08h
  491.         mov    dx,[RS_status]
  492.         int    9Bh
  493.  
  494. RS_end_1:    push    ds
  495.         lds    dx,es:[key_vect]
  496.         mov    ax,2590h        ; Set 90h int Vect
  497.         int    21h
  498.         pop    ds
  499.  
  500.         ret
  501. RS_end        endp
  502.  
  503.                 align   16
  504.  
  505.         db    256 dup (?)
  506.  
  507. Local_Stack    label    word
  508.         public    End_of_Prog
  509. End_of_Prog    label    word
  510.  
  511. Pal_Tbl        db    000h,000h,000h
  512.         db    0B0h,000h,000h
  513.         db    000h,0B0h,000h
  514.         db    0B0h,0B0h,000h
  515.         db    000h,000h,0B0h
  516.         db    0B0h,000h,0B0h
  517.         db    000h,0B0h,0B0h
  518.         db    0B0h,0B0h,0B0h
  519.         db    0B0h,0B0h,0B0h
  520.         db    0F0h,000h,000h
  521.         db    000h,0F0h,000h
  522.         db    0F0h,0F0h,000h
  523.         db    000h,000h,0F0h
  524.         db    0F0h,000h,0F0h
  525.         db    000h,0F0h,0F0h
  526.         db    0F0h,0F0h,0F0h
  527.  
  528. CRT_Reg_Tbl    dw    0040h,0320h,0000h,0000h
  529.         dw    035Fh,0000h,0010h,0000h
  530.         dw    036Fh,009Ch,031Ch,009Ch
  531.         dw    031Ch,0040h,0360h,0040h
  532.         dw    0360h,0000h,009Ch,0000h
  533.         dw    0050h,0000h,009Ch,0000h
  534.         dw    0050h,004Ah,0001h,0000h
  535.         dw    003Fh,0003h,0000h,0150h
  536.  
  537. Palet_init    proc    near
  538.         sub    cl,cl
  539.         mov    si,offset DGROUP:Pal_Tbl
  540. Pal_init_1:    mov    al,cl
  541.         mov    dx,0FD90h
  542.         out    dx,al
  543.         lodsb
  544.         mov    dx,0FD92h
  545.         out    dx,al
  546.         lodsb
  547.         mov    dx,0FD94h
  548.         out    dx,al
  549.         lodsb
  550.         mov    dx,0FD96h
  551.         out    dx,al
  552.         inc    cl
  553.         cmp    cl,16
  554.         jb    Pal_init_1
  555.         ret    
  556. Palet_init    endp
  557.  
  558. ;
  559. ; SI = Data Address
  560. ;
  561. CRTC_set    proc    near
  562.         sub    cl,cl
  563. CRTC_set_1:    mov    al,cl
  564.         mov    dx,0440h
  565.         out    dx, al
  566.         lodsw
  567.         mov    dx,0442h
  568.         out    dx, ax
  569.         inc    cl
  570.         cmp    cl,32
  571.         jb    CRTC_set_1
  572.         ret    
  573. CRTC_set    endp
  574.  
  575. ;
  576. ; AL = Val
  577. ;
  578. CRTC_onoff    proc    near
  579.         push    ax
  580.         mov    al,01Ch
  581.         mov    dx,0440h
  582.         out    dx,al
  583.         pop    ax
  584.         mov    dx,0443h
  585.         out    dx,al
  586.         ret
  587. CRTC_onoff    endp
  588.  
  589. ;
  590. ; SI = Data Address
  591. ;
  592. CRTC_init    proc    near
  593.         mov    al,0
  594.         call    CRTC_onoff
  595.         call    CRTC_set
  596.         mov    al,byte ptr [CRT_Reg_Tbl+01Ch*2]
  597.         or    al,80h
  598.         call    CRTC_onoff
  599.         ret
  600. CRTC_init    endp
  601.  
  602. ;
  603. ; AX = Val
  604. ;
  605. Video_init    proc    near
  606.         push    ax
  607.         mov    al,0
  608.         mov    dx,0448h
  609.         out    dx,al
  610.         pop    ax
  611.         mov    dx,044Ah
  612.         out    dx,al
  613.  
  614.         mov    al,1
  615.         mov    dx,0448h
  616.         out    dx,al
  617.         mov    al,ah
  618.         mov    dx,044Ah
  619.         out    dx,al
  620.         ret
  621. Video_init    endp
  622.  
  623. Screen_init    proc    near
  624.  
  625.         mov    al,0
  626.         mov    dx,0FDA0h
  627.         out    dx,al
  628.  
  629.         mov    si,offset DGROUP:CRT_Reg_Tbl
  630.         call    CRTC_init
  631.  
  632.         mov    ax,0815h
  633.         call    Video_init
  634.  
  635.         call    Palet_init
  636.         call    _VDB_init
  637.         call    _cflush
  638.  
  639.         mov    al,0Fh
  640.         mov    dx,0FDA0h
  641.         out    dx,al
  642.         ret
  643. Screen_init    endp
  644.  
  645. pf_key_tbl    db    01h,80h, 2,1Bh,'S'    ;PF1
  646.         db    02h,80h, 2,1Bh,'T'    ;PF2
  647.         db    03h,80h, 2,1Bh,'U'    ;PF3
  648.         db    04h,80h, 2,1Bh,'V'    ;PF4
  649.         db    05h,80h, 2,1Bh,'W'    ;PF5
  650.         db    06h,80h, 2,1Bh,'E'    ;PF6
  651.         db    07h,80h, 2,1Bh,'J'    ;PF7
  652.         db    08h,80h, 2,1Bh,'P'    ;PF8
  653.         db    09h,80h, 2,1Bh,'Q'    ;PF9
  654.         db    0ah,80h, 2,1Bh,'Z'    ;PF10
  655.  
  656.         db    0bh,80h, 2,1Bh,'S'    ;PF11
  657.         db    1dh,80h, 2,1Bh,'T'    ;PF12
  658.         db    21h,80h, 2,1Bh,'U'    ;PF13
  659.         db    22h,80h, 2,1Bh,'V'    ;PF14
  660.         db    23h,80h, 2,1Bh,'W'    ;PF15
  661.         db    24h,80h, 2,1Bh,'E'    ;PF16
  662.         db    25h,80h, 2,1Bh,'J'    ;PF17
  663.         db    26h,80h, 2,1Bh,'P'    ;PF18
  664.         db    27h,80h, 2,1Bh,'Q'    ;PF19
  665.         db    28h,80h, 2,1Bh,'Z'    ;PF20
  666.  
  667.         db    12h,00h, 2,1Bh,'P'    ;[INS]
  668.         db    7fh,00h, 2,1Bh,'V'    ;[DEL]
  669.         db    18h,80h, 0        ;[半角/全角]
  670.         db    1ch,80h, 0        ;[かな漢字]
  671.         db    0,0
  672.  
  673. Start_Msg    db    'FM-Towns FMR50 コンソ-ルシュミレ-タ v1.09'
  674.         db    0Dh,0Ah
  675.         db    '                   + マルチタ-ミナル v1.00'
  676.         db    0Dh,0Ah
  677.         db    'Programmed by K.MIYAZAKI'
  678.         db    0Dh,0Ah
  679.         db    'Asistant programmer N.YAMAZAKI'
  680.         db    0Dh,0Ah
  681.         db    0Dh,0Ah
  682.         db    'FM-Towns OAK/2 フロントエンドプロセッサー v1.04a'
  683.         db    0Dh,0Ah
  684.         db    'Programmed by N.YAMAZAKI'
  685.         db    0Dh,0Ah
  686.         db    'Investigated by K.MIYAZAKI Thanks a lot.'
  687.         db    0Dh,0Ah
  688.         db    '$'
  689.  
  690. PF_key_init    proc    near
  691.         mov    di,offset DGROUP:pf_key_tbl
  692.         xor    cx,cx
  693. key_set:    mov    dx,word ptr [di]
  694.         cmp    dx,0
  695.         je    key_st_e
  696.         add    di,2
  697.         mov    cl,[di]
  698.         inc    di
  699.         mov    ax,0E00h
  700.         int    90h
  701.         add    di,cx
  702.         jmp    key_set
  703.  
  704. key_st_e:    mov    dx,offset DGROUP:Start_Msg
  705.         mov    ah,09h
  706.         int    21h
  707.         ret
  708. PF_key_init    endp
  709.  
  710. extrn        _path_top:near
  711.  
  712. Path_init    proc    near
  713.         ASSUME DS: nothing, ES: DGROUP
  714.  
  715.         push    ds
  716.         push    es
  717.  
  718.         mov    ax,ds
  719.         mov    es,ax
  720.  
  721.         mov    ds,es:[EnvSeg]
  722.         mov    si,0
  723.         mov    di,offset DGROUP:_path_top
  724.  
  725. _Path_1:    cmp    byte ptr ds:[si],0
  726.         je    _Path_4
  727.  
  728.         mov    ax,ds:[si]
  729.         and    ax,0DFDFh
  730.         cmp    ax,'A'*256+'P'
  731.         jne    _Path_3
  732.         mov    ax,ds:[si+2]
  733.         and    ax,0DFDFh
  734.         cmp    ax,'H'*256+'T'
  735.         jne    _Path_3
  736.         cmp    byte ptr ds:[si+4],'='
  737.         jne    _Path_3
  738.  
  739.         add    si,5
  740. _Path_2:    cmp    byte ptr ds:[si],0
  741.         je    _Path_4
  742.         cmp    di,offset DGROUP:_path_top+127
  743.         jnb    _Path_4
  744.         movsb
  745.         jmp    _Path_2
  746.  
  747. _Path_3:    lodsb
  748.         cmp    al,0
  749.         jne    _Path_3
  750.         jmp    _Path_1
  751.  
  752. _Path_4:    mov    byte ptr es:[di],0
  753.         pop    es
  754.         pop    ds
  755.         ret
  756.         ASSUME DS: DGROUP, ES: nothing
  757.  
  758. Path_init    endp
  759.  
  760. RS_init        proc    near
  761.         mov    ah,09h
  762.         mov    al,[term_port]
  763.         int    9Bh
  764.         mov    [RS_status],dx
  765.  
  766.         mov    ah,02h
  767.         mov    al,[term_port]
  768.         int    9Bh
  769.  
  770.         mov    ah,04h
  771.         mov    al,[term_port]
  772.         mov    di,offset DGROUP:RS_old_param
  773.         int    9Bh
  774.  
  775.         mov    ah,04h
  776.         mov    al,[term_port]
  777.         mov    di,offset DGROUP:RS_param
  778.         int    9Bh
  779.  
  780.         mov    bx,offset DGROUP:RS_buffer+15
  781.         and    bl,0F0h
  782.         mov    word ptr [bx],1024
  783.         mov    [RS_buf_off],bx
  784.         mov    [RS_buf_seg],ds
  785.         mov    [RS_irq_off],offset DGROUP:RS_irq_ent
  786.         mov    [RS_irq_seg],cs
  787.  
  788.         mov    ah,03h
  789.         mov    al,[term_port]
  790.         mov    di,offset DGROUP:RS_param
  791.         int    9Bh
  792.  
  793.         mov    ah,01h
  794.         mov    al,[term_port]
  795.         int    9Bh
  796.  
  797.         mov    ax,3590h        ; Get 90h Int Vect
  798.         int    21h
  799.         mov    word ptr cs:[key_vect],bx
  800.         mov    word ptr cs:[key_vect+2],es
  801.  
  802.         mov    dx,offset DGROUP:Key_Bios
  803.         mov    ax,2590h        ; Set New Vect
  804.         int    21h
  805.  
  806.         ret
  807. RS_init        endp
  808.  
  809. _INST        ends
  810.         end    entry
  811.